package model

import (
	"time"
)

// Tag 标签模型
// 对应数据库表: tags
type Tag struct {
	// ==================== 主键 ====================
	ID int64 `gorm:"primaryKey;autoIncrement" json:"id"`

	// ==================== 标签信息 ====================
	// Name 标签名称 (唯一)
	Name string `gorm:"type:varchar(50);not null;uniqueIndex:uk_name" json:"name"`

	// Color 标签颜色 (用于前端显示,默认蓝色)
	Color string `gorm:"type:varchar(20);default:#1890ff" json:"color"`

	// ArticleCount 关联文章数 (冗余字段,提升性能)
	ArticleCount int `gorm:"default:0;column:article_count" json:"article_count"`

	// ==================== 时间戳 ====================
	CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`

	// ==================== 关联关系 ====================
	// Articles 该标签关联的所有文章 (多对多)
	Articles []Article `gorm:"many2many:article_tags" json:"articles,omitempty"`
}

// TableName 指定表名
func (Tag) TableName() string {
	return "tags"
}

// ==================== 业务方法 ====================

// IncrementArticleCount 增加文章计数
func (t *Tag) IncrementArticleCount(count int) {
	t.ArticleCount += count
}

// DecrementArticleCount 减少文章计数
func (t *Tag) DecrementArticleCount(count int) {
	t.ArticleCount -= count
	if t.ArticleCount < 0 {
		t.ArticleCount = 0
	}
}
